﻿
namespace SistemaLogistica.Business.Logic
{
    using System;
    using System.Collections.Generic;
    using SistemaLogistica.Business.Entities;
    using SistemaLogistica.DataAccess;

    public class EmpleadoManager
    {
        private EmpleadoManager() { }

        private static readonly EmpleadoManager instancia = new EmpleadoManager();

        public static EmpleadoManager Instancia
        {
            get { return instancia; }
        }

        #region Empleados

        public List<Empleados> Listar()
        {
            try
            {
                return EmpleadoData.Instancia.Listar();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Empleados> ListarPorDNI(string dni)
        {
            try
            {
                return EmpleadoData.Instancia.BuscarPorDNI(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Empleados> Buscar(string dni, string nombre, string apellidos)
        {
            try
            {
                return EmpleadoData.Instancia.BuscarPorNombre(dni, nombre, apellidos);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Empleados ObtenerPorID(short idEmpleado)
        {
            try
            {
                return EmpleadoData.Instancia.ObtenerPorID(idEmpleado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool Agregar(Empleados empleado)
        {
            try
            {
                return EmpleadoData.Instancia.Agregar(empleado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Modificar(Empleados empleado)
        {
            try
            {
                EmpleadoData.Instancia.Modificar(empleado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Eliminar(short idEmpleado)
        {
            try
            {
                EmpleadoData.Instancia.Eliminar(idEmpleado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Usuarios

        public List<Usuario> ListarUsuario()
        {
            try
            {
                return EmpleadoData.Instancia.ListarUsuarios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Usuario ObtenerPorCredencial(string username, string password)
        {
            try
            {
                return EmpleadoData.Instancia.ObtenerPorCredencial(username, password);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void AgregarUsuario(Usuario usuario)
        {
            try
            {
                EmpleadoData.Instancia.AgregarUsuario(usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void EditarUsuario(Usuario usuario)
        {
            try
            {
                EmpleadoData.Instancia.EditarUsuario(usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void EliminarUsuario(short idEmpleado)
        {
            try
            {
                EmpleadoData.Instancia.EliminarUsuario(idEmpleado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Permisos

        public List<Permiso> ListarPermisosPorUsuario(short idEmpleado)
        {
            try
            {
                return EmpleadoData.Instancia.ListarPermisos(idEmpleado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Permiso> ListarPermisosPorUsuarioYFormulario(short idEmpleado, byte idFormulario)
        {
            try
            {
                return EmpleadoData.Instancia.ListarPermisosPorUsuarioAndFormulario(idEmpleado, idFormulario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Permiso> ListarPermisosPorUsuarioYMenu(short idEmpleado, byte idMenu)
        {
            try
            {
                return EmpleadoData.Instancia.ListarPermisosPorUsuarioMenu(idEmpleado, idMenu);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Permiso> ListarPermisosPorUsuarioYMenuConAcceso(short idEmpleado, byte idMenu)
        {
            try
            {
                return EmpleadoData.Instancia.ListarPermisosPorUsuarioMenuConAcceso(idEmpleado, idMenu);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }
}
